WebからコピペしたらSB記法に変換する - Scrapboxとあそぶ
web pageコピペ用script
やはり記事にもある通り、[* Firefoxでは動かない。]
2020-12-23 22:17:20 動くようにした
WebからコピペしたらSB記法に変換する - Scrapboxとあそぶ#5fe340491280f000000f6c5e
WebからコピペしたらSB記法に変換する - Scrapboxとあそぶ
まだまだ要検証なんだけど、なんとなく動いたから置いておきます。
相変わらず自己流で書いてるので手探りのゴリ押しです!
そしてFirefoxでは動かない。
WebページからコピーしてScrapboxにペーストしてみた
https://gyazo.com/298ff52508f22df898ab7f1d95d70d17
このスクリプトを使うと、ペースト時にHTMLからScrapboxの記法に変換するようになるので、
プレーンテキストで貼り付けたいときは右クリックメニューから「プレーンテキストとして貼り付け」等を使ってね。
ショートカットはだいたい Ctrl + Shift + V だと思う
? スマホやタブレットで貼り付けする場合はどうやって回避したらいいのかな…
code:script.js
if (sessionStorage.getItem('scrasobox-paste') !== 'true') {
document.addEventListener('paste', event => {
const type = 'text/html'
const d = event.clipboardData
if (d.types && d.types.indexOf('Files') == -1 && -1 < d.types.indexOf(type)) {
event.preventDefault()
const dom = new DOMParser().parseFromString(d.getData(type), type)
const ng = text => text.trim().replace(/[\\\n]/g, ' ')
const q = query => dom.querySelectorAll(query)
const f = (text, deco) =>
[].concat(text.split(/\n/)
.filter(l => l.trim()).map(l => [${deco} ${l.trim()}] )).join('')
q('pre').forEach(d => {
d.innerText = 'code:code.*\n' + d.innerText.split('\n').map(l => ${l}).join('\n') })
q('h3').forEach(d => { d.innerText = f(d.innerText, '**') })
q('h2').forEach(d => { d.innerText = f(d.innerText, '***') })
q('h1').forEach(d => { d.innerText = f(d.innerText, '****') })
q('em, i').forEach(d => { d.innerText = f(d.innerText, '/') })
q('strong, b').forEach(d => { d.innerText = f(d.innerText, '*') })
q('ahref imgsrc').forEach(d => {
d.closest('a').outerHTML = [${d.src.trim()}#.png ${d.closest('a').href}] })
q('ahref').forEach(d => { d.outerHTML = [${d.href} ${ng(d.text).trim()}] })
q('imgsrc').forEach(d => { d.outerHTML = [${d.src.trim()}#.png] })
q('iframesrc*="//www.youtube.com/embed/"').forEach(d => {
d.outerHTML = [https://www.youtube.com/watch?v=${d.src.split('/embed/')[1].split('?')[0]}] })
q('code').forEach(d => { d.innerText = '' + d.innerText + '' })
let depth = -1
const li = node => {
depth++
node.querySelectorAll('li').forEach(n => li(n))
return node.innerHTML = '@sp@'.repeat(depth--) + node.innerHTML
}
li(dom.body)
const div = document.createElement('div')
div.innerHTML = dom.body.innerHTML
document.body.appendChild(div)
const range = document.createRange()
range.selectNode(div)
//const text = range.toString()
const text = div.innerText
document.execCommand('insertText', null, text.replace(/(\s*\n){3,}/g, '\n\n').replace(/@sp@/gi, ' '))
document.body.removeChild(div)
}
})
sessionStorage.setItem('scrasobox-paste', true)
}
window.addEventListener('unload', () => { sessionStorage.setItem('scrasobox-paste', false) })
scrapbox-insert-textを使って書き換えた
これなら動くかな?takker.icon
2020-12-23 22:09:59 うごいた!
firefoxだとplain textとして貼り付けが使えないのか
sessionStorageを使っている理由がわからないな
html2sbを使うように書き換えた
移動した
/customize/web pageをscrapbox記法に変換して貼り付けるUserScript
2024-08-18 15:04:33 動いていない
html2sbのバグ
code:script2.js
import {insertText} from '../scrapbox-insert-text/script.js';
import {scrapboxDOM} from '../scrapbox-dom-accessor/script.js';
import {parse} from '../html2sb/script.js';
document.addEventListener('paste', event => {
const type = 'text/html';
const d = event.clipboardData;
if (!(d.types && d.types.indexOf('Files') == -1 && -1 < d.types.indexOf(type))) return;
event.preventDefault();
insertText({
text: parse({html: d.getData(type)}),
cursor: scrapboxDOM.textInput,
});
});
類似script
/hiroshi-public/ブラウザなどからコピーしたリンクなどを含むテキストを scrapbox に貼り付ける
こっちのほうがシンプル?
#2024-08-18 15:04:39
#2022-05-23 16:49:43
#2020-12-24 00:48:49
#2020-12-23 22:06:09
Added on 2020-06-03